#!/bin/bash
#
# Start Cobalt Strike Team Server
#

source ./source-common.sh

# check that we're r00t
if [ $UID -ne 0 ]; then
	print_error "Superuser privileges are required to run the team server"
	exit
fi

# 4.6+ Runtime Image Preparation
# prepareTeamServerImage

# check if java is available...
if [ $(command -v java) ]; then
	true
else
	print_error "java is not in \$PATH"
	echo "    is Java installed?"
	exit
fi

# check if keytool is available...
if [ $(command -v keytool) ]; then
	true
else
	print_error "keytool is not in \$PATH"
	echo "    install the Java Developer Kit"
	exit
fi

# generate a certificate
	# naturally you're welcome to replace this step with your own permanent certificate.
	# just make sure you pass -Djavax.net.ssl.keyStore="/path/to/whatever" and
	# -Djavax.net.ssl.keyStorePassword="password" to java. This is used for setting up
	# an SSL server socket. Also, the SHA-1 digest of the first certificate in the store
	# is printed so users may have a chance to verify they're not being owned.
echo
if [ -e ./cobaltstrike.store ]; then
	print_info "Will use existing X509 certificate and keystore (for SSL)"
else
	print_info "Generating X509 certificate and keystore (for SSL)"
	keytool -keystore ./cobaltstrike.store -storepass 123456 -keypass 123456 -genkey -keyalg RSA -alias cobaltstrike -dname "CN=Major Cobalt Strike, OU=AdvancedPenTesting, O=cobaltstrike, L=Somewhere, S=Cyberspace, C=Earth"
fi

# (pre-4.6) start the team server.
# java -XX:ParallelGCThreads=4 -Dcobaltstrike.server_port=50050 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 -server -XX:+AggressiveHeap -XX:+UseParallelGC -classpath ./cobaltstrike.jar server.TeamServer $*

# 4.6+ start the peclone process.
# TODO: Does this need "-server" option?
print_section_header "Starting teamserver"
./TeamServerImage -Dcobaltstrike.server_port=50050 -Dcobaltstrike.server_bindto=0.0.0.0 -Djavax.net.ssl.keyStore=./cobaltstrike.store -Djavax.net.ssl.keyStorePassword=123456 teamserver $*
